#include "httpmgr.h"
HttpMgr::HttpMgr() {
    connect(this,&HttpMgr::sig_http_finish,this,&HttpMgr::slot_http_finish);
}

void HttpMgr::PostHttpReq(QUrl url, QJsonObject json, ReqId req_id, Modules mod)
{
    // 创建一个网络请求对象
    QNetworkRequest request(url);
    // 设置请求头，表明请求体是 JSON 格式
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    // 将 JSON 对象转换为 JSON 文档，再转换为字节数组
    QJsonDocument doc(json);
    QByteArray data = doc.toJson();
    request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(data.length()));// 使用 QByteArray::number 将整数转换为字符串

    // 获取自身的智能指针，增加引用计数
    // 在 HttpMgr 类的定义中，继承了 std::enable_shared_from_this<HttpMgr>。
    // 这是使用 shared_from_this() 的前提条件，
    // 该基类提供了 shared_from_this() 成员函数，用于安全地获取当前对象的 std::shared_ptr。
    auto self= shared_from_this();

    QNetworkReply *reply = _manager.post(request, data);
    connect(reply,&QNetworkReply::finished, [self, reply, req_id, mod](){
        if(reply->error() != QNetworkReply::NoError){
            qDebug() << reply->errorString();
            //发送信号通知完成
            qDebug()<<"reply is error";
            emit self->sig_http_finish(req_id, "", ErrorCodes::ERR_NETWORK, mod);
            reply->deleteLater();
            return;
        }

        QString res=reply->readAll();
        emit self->sig_http_finish(req_id,res,ErrorCodes::SUCCESS,mod);
        reply->deleteLater();
        return;
    });
}

void HttpMgr::slot_http_finish(ReqId id, QString res, ErrorCodes err, Modules mod)
{
    if(mod == Modules::REGISTERMOD){
        //发送信号通知指定模块http响应结束
        emit sig_reg_mod_finish(id, res, err);
    }
    if(mod == Modules::RESETMOD){
        //发送信号通知指定模块http响应结束
        emit sig_reset_mod_finish(id, res, err);
    }
    if(mod == Modules::LOGINMOD){
        emit sig_login_mod_finish(id, res, err);
    }
};

HttpMgr::~HttpMgr() {

}
